package com.c6906.vdam.dps.common;

import org.springframework.util.StringUtils;

import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;

/**
 * @Author : TAOHUIQI
 * @Date: 2024/6/16 20:41
 * @Description:
 */
public class DateUtils {

    public static Date strToDate(String str) {
        DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date;
        try {
            date = fmt.parse(str);
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
        return date;
    }

    public static String dateToStr(Date date) {
        DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return fmt.format(date);
    }

    public static Date longTimesToStr(long time) {
        // 创建SimpleDateFormat对象，并设置日期格式
        SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        // 将时间戳转换为Date对象
        return new Date(time);
    }

    public static int StrDateToIntDate(String str) {
        String yearMonthDay = str.substring(0, 10);
        return Integer.valueOf(yearMonthDay.replaceAll("-", ""));
    }

    public static long strToTimes(String str) {
        long time;
        DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date;
        try {
            date = fmt.parse(str);
            time = date.getTime();
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
        return time;
    }

    public static long calculateTimeDiff(String startTime, String endTime) {
        long longStartTime = strToTimes(startTime);
        long longEndTime = strToTimes(endTime);
        return Math.abs((longEndTime - longStartTime) / 1000);
    }

    public static long strToLocalDate(String str) {
        DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
        LocalDateTime dateTime = LocalDateTime.parse(str, formatter);
        ZonedDateTime zonedDateTime = dateTime.atZone(ZoneId.systemDefault());
        return zonedDateTime.toEpochSecond() * 1000;
    }

    public static double strToDouble(String str) {
        if (!StringUtils.isEmpty(str)) {
            return Double.parseDouble(str);
        } else {
            return 0;
        }
    }

    public static Integer strToInteger(String str) {
        if (!StringUtils.isEmpty(str)) {
            return Integer.valueOf(str);
        } else {
            return 0;
        }
    }

    public static BigDecimal strToBigDecimal(String str) {
        if (!StringUtils.isEmpty(str)) {
            BigDecimal bigDecimalValue = new BigDecimal(str);
            return bigDecimalValue;
        } else {
            return BigDecimal.ZERO;
        }
    }

    public static int strToInt(String str) {
        if (!StringUtils.isEmpty(str)) {
            return Integer.parseInt(str);
        } else {
            return 0;
        }
    }
}
